import 'dart:async';
import 'dart:io';

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:ui' as ui;

import 'package:flutter/services.dart';
typedef Imgonclick = void Function(int position);
typedef Imgondelclick = void Function(int position);
typedef Callback = void Function(dynamic data);

class LImage {
  static var bg_default_loading="assets/images/bg_default_loading.png";
// //region 图片选择
//   ///返回图片路径,index -1 会提示用户选择，0 表示默认相机，1 表示默认 相册
//   static Future<String?> getFileImagePath(context, {index1 = -1}) async {
//     int index = index1;
//     if (index == -1) {
//       index = -2;
//       await showModalBottomSheet(
//           backgroundColor: Colors.transparent,
//           shape: RoundedRectangleBorder(
//               borderRadius: BorderRadius.horizontal(
//             left: Radius.circular(8),
//             right: Radius.circular(8),
//           )),
//           context: context,
//           builder: (ctx) {
//             return StatefulBuilder(builder: (context, state) {
//               return Container(
//                 child:
//                     Column(mainAxisSize: MainAxisSize.min, children: <Widget>[
//                   SizedBox(
//                     height: ScreenUtil().setHeight(10),
//                   ),
//                   InkWell(
//                     child: Container(
//                       width: double.infinity,
//                       margin: EdgeInsets.fromLTRB(12.w, 12.w, 12.w, 0),
//                       decoration: BoxDecoration(
//                         borderRadius: BorderRadius.circular(10.w),
//                         color: App.appColors.background,
//                       ),
//                       child: Column(
//                         children: [
//                           InkWell(
//                             onTap: () {
//                               index = 0;
//                               Navigator.pop(context);
//                             },
//                             child: Container(
//                               height: 50.h,
//                               width: double.infinity,
//                               padding: EdgeInsets.only(top: 10.h),
//                               child: Text(
//                                 "拍照",
//                                 style: TextStyle(fontSize: 18.sp),
//                                 textAlign: TextAlign.center,
//                               ),
//                             ),
//                           ),
//                           Divider(
//                             height: 0.h,
//                           ),
//                           InkWell(
//                             onTap: () {
//                               index = 1;
//                               Navigator.pop(context);
//                             },
//                             child: Container(
//                               width: double.infinity,
//                               height: 50.h,
//                               padding: EdgeInsets.only(top: 5.h),
//                               child: Text(
//                                 "相簿",
//                                 style: TextStyle(fontSize: 18.sp),
//                                 textAlign: TextAlign.center,
//                               ),
//                             ),
//                           ),
//                         ],
//                       ),
//                     ),
//                     onTap: () {},
//                   ),
//                   InkWell(
//                     onTap: () {
//                       index = -2;
//                       Navigator.pop(context);
//                     },
//                     child: Container(
//                       height: 50.h,
//                       width: double.infinity,
//                       margin: EdgeInsets.all(12.w),
//                       padding: EdgeInsets.only(top: 10.h),
//                       decoration: BoxDecoration(
//                         borderRadius: BorderRadius.circular(10.w),
//                         color: App.appColors.background,
//                       ),
//                       child: Text(
//                         "取消",
//                         style: TextStyle(fontSize: 18.sp),
//                         textAlign: TextAlign.center,
//                       ),
//                     ),
//                   ),
//                   SizedBox(
//                     height: ScreenUtil().setHeight(20.h),
//                   ),
//                 ]),
//               );
//             });
//           });
//     }
//
//     if (index == -2) return null;
//     XFile? image;
//     if (Platform.isIOS) {
//       image = await _checkPermission(index == 1, context);
//     } else {
//       if (index == 0) {
//         image = await _camera();
//       } else {
//         image = await _album();
//       }
//     }
//     if (image == null) return null;
//     return image.path;
//   }
//
//   static Future<XFile?> _camera() async {
//     return await ImagePicker()
//         .pickImage(source: ImageSource.camera, maxWidth: 1920, maxHeight: 1920);
//   }
//
//   static Future<XFile?> _album() async {
//     return (await ImagePicker().pickImage(
//         source: ImageSource.gallery, maxWidth: 1920, maxHeight: 1920));
//   }
//
//   // 显示相册或相机，photo表示是否显示相册，为false表示显示相机
//   static Future<XFile?> _showImagePicker(bool photo) async {
//     if (photo) {
//       return _album();
//     } else {
//       return _camera();
//     }
//   }
//
//   static Future<XFile?> _checkPermission(bool photo, context) async {
//     final permissions = [
//       photo ? Permissions.READ_EXTERNAL_STORAGE : Permissions.CAMERA
//     ];
//     final permissionGroup = [
//       photo ? PermissionGroup.Photos : PermissionGroup.Camera
//     ];
//     bool granted = await FlutterEasyPermission.has(
//         perms: permissions, permsGroup: permissionGroup);
//     if (granted) {
//       return _showImagePicker(photo);
//     } else {
//       // 未授权则发起一次申请
//       bool asked = photo
//           ? await StoreUtil.getAskiOSPhotos()
//           : await StoreUtil.getAskiOSCamera();
//       if (asked) {
//         String permissionName = photo ? '相簿' : '相機';
//         String title = '“Flare“想訪問您的”$permissionName';
//         String content = 'App需要您的同意，才能訪問$permissionName';
//         showCupertinoDialog(
//             context: context,
//             builder: (context) {
//               return CupertinoAlertDialog(
//                 title: Text(title),
//                 content: Text(content),
//                 actions: <Widget>[
//                   CupertinoDialogAction(
//                     child: Text('不允許'),
//                     onPressed: () {
//                       Navigator.of(context).pop();
//                     },
//                   ),
//                   CupertinoDialogAction(
//                     child: Text('好'),
//                     onPressed: () {
//                       AppSettings.openLocationSettings();
//                       Navigator.of(context).pop();
//                     },
//                   ),
//                 ],
//               );
//             });
//         return null;
//       } else {
//         if (photo) {
//           StoreUtil.saveAskiOSPhotos(true);
//         } else {
//           StoreUtil.saveAskiOSCamera(true);
//         }
//         return _showImagePicker(photo);
//       }
//     }
//   }
//
//   ///返回图片路径,index -1 会提示用户选择，0 表示默认相机，1 表示默认 相册
//   static Future<List<XFile>?> getFileImagePaths(context, {index1 = -1}) async {
//     int index = index1;
//     if (index == -1) {
//       index = -2;
//       await showModalBottomSheet(
//           backgroundColor: Colors.transparent,
//           shape: RoundedRectangleBorder(
//               borderRadius: BorderRadius.horizontal(
//             left: Radius.circular(8),
//             right: Radius.circular(8),
//           )),
//           context: context,
//           builder: (ctx) {
//             return StatefulBuilder(builder: (context, state) {
//               return Container(
//                 child:
//                     Column(mainAxisSize: MainAxisSize.min, children: <Widget>[
//                   SizedBox(
//                     height: ScreenUtil().setHeight(10),
//                   ),
//                   InkWell(
//                     child: Container(
//                       width: double.infinity,
//                       margin: EdgeInsets.fromLTRB(12.w, 12.w, 12.w, 0),
//                       decoration: BoxDecoration(
//                         borderRadius: BorderRadius.circular(10.w),
//                         color: Colors.white,
//                       ),
//                       child: Column(
//                         children: [
//                           InkWell(
//                             onTap: () {
//                               index = 0;
//                               Navigator.pop(context);
//                             },
//                             child: Container(
//                               height: 50.h,
//                               width: double.infinity,
//                               padding: EdgeInsets.only(top: 10.h),
//                               child: Text(
//                                 "拍照",
//                                 style: TextStyle(fontSize: 18.sp),
//                                 textAlign: TextAlign.center,
//                               ),
//                             ),
//                           ),
//                           Divider(
//                             height: 0.h,
//                           ),
//
//                           InkWell(
//                             onTap: () {
//                               index = 1;
//                               Navigator.pop(context);
//                             },
//                             child: Container(
//                               width: double.infinity,
//                               height: 50.h,
//                               padding: EdgeInsets.only(top: 5.h),
//                               child: Text(
//                                 "相簿",
//                                 style: TextStyle(fontSize: 18.sp),
//                                 textAlign: TextAlign.center,
//                               ),
//                             ),
//                           ),
//                           // Divider(height: 0.h,),
//                           //
//                           // InkWell(
//                           //   onTap: (){index=2;
//                           //   Navigator.pop(context);},
//                           //   child: Container(
//                           //     width: double.infinity,
//                           //     height: 50.h,
//                           //     padding: EdgeInsets.only(top: 5.h),
//                           //     child:  Text("视频",style: TextStyle(fontSize: 18.sp),textAlign: TextAlign.center,),),
//                           // ),
//                           // Divider(height: 0.h,),
//                           // InkWell(
//                           //   onTap: (){index=3;
//                           //   Navigator.pop(context);},
//                           //   child: Container(
//                           //     width: double.infinity,
//                           //     height: 50.h,
//                           //     padding: EdgeInsets.only(top: 5.h),
//                           //     child:  Text("视频拍摄",style: TextStyle(fontSize: 18.sp),textAlign: TextAlign.center,),),
//                           // ),
//                         ],
//                       ),
//                     ),
//                     onTap: () {},
//                   ),
//                   InkWell(
//                     onTap: () {
//                       index = -2;
//                       Navigator.pop(context);
//                     },
//                     child: Container(
//                       height: 50.h,
//                       width: double.infinity,
//                       margin: EdgeInsets.all(12.w),
//                       padding: EdgeInsets.only(top: 10.h),
//                       decoration: BoxDecoration(
//                         borderRadius: BorderRadius.circular(10.w),
//                         color: Colors.white,
//                       ),
//                       child: Text(
//                         "取消",
//                         style: TextStyle(fontSize: 18.sp),
//                         textAlign: TextAlign.center,
//                       ),
//                     ),
//                   ),
//                   SizedBox(
//                     height: ScreenUtil().setHeight(20.h),
//                   ),
//                 ]),
//               );
//             });
//           });
//     }
//     if (index == -2) return null;
//     XFile? image;
//     if (index == 0) {
//       print('选择的是相机');
//       image = await ImagePicker()
//           .pickImage(source: ImageSource.camera, maxWidth: 640, maxHeight: 480);
//       return [image!];
//     } else if (index == 2) //文件
//       image = await ImagePicker().pickVideo(source: ImageSource.gallery);
//     else if (index == 3) //文件
//       image = await ImagePicker().pickVideo(source: ImageSource.camera);
//     else {
//       print('选择的是相册');
//       if (Platform.isIOS) {
//         image = await ImagePicker().pickImage(
//             source: ImageSource.gallery, maxWidth: 640, maxHeight: 480);
//         return [image!];
//       } else {
//         return await ImagePicker().pickMultiImage();
//       }
//     }
//     return [image!];
//   }
//
//   //endregion
//   ///region 图片排列展示
//   static Widget imgAddShow(
//       {imgdatas, required Imgonclick onclick, Imgondelclick? ondelclick}) {
//     return Wrap(
//       crossAxisAlignment: WrapCrossAlignment.start,
//       spacing: 10.w,
//       runSpacing: 13.w,
//       children: imgdatas == null
//           ? []
//           : List.generate(
//               imgdatas.length + 1,
//               (index) => InkWell(
//                   onTap: () {
//                     if (index == imgdatas.length)
//                       onclick(index);
//                     else {
//                       Get.to(
//                           PhotoAllShowView(index: index, imgDataArr: imgdatas));
//                     }
//                   },
//                   child: Container(
//                     width: 94.w,
//                     height: 94.w,
//                     child: Stack(
//                       alignment: Alignment.center,
//                       children: <Widget>[
//                         Positioned(
//                           child: Container(
//                             width: 94.w,
//                             height: 94.w,
//                             child: index == imgdatas.length
//                                 ? Container(
//                                     color: Color(0xFFD8D8D8),
//                                     child: Icon(
//                                       Icons.camera_alt,
//                                       size: 40.w,
//                                     ),
//                                   )
//                                 : imageR(imgdatas[index], w: 94.w, h: 94.w),
//                           ),
//                         ),
//                         if (index != imgdatas.length)
//                           Positioned(
//                               right: -10,
//                               top: -10,
//                               child: Container(
//                                 child: IconButton(
//                                   icon: Icon(
//                                     Icons.cancel,
//                                     color: Colors.red,
//                                     size: 24.w,
//                                   ),
//                                   onPressed: () => ondelclick!(index),
//                                 ),
//                               ))
//                       ],
//                     ),
//                   )),
//             ),
//     );
//   }

  ///endregion
  ///region支持 本地及，网络
  ///圆形
  static Widget imageO(str, {w, h}) {
    return Container(
      width: w,
      height: h,
      child: ClipOval(
        clipBehavior: Clip.antiAlias,
        child: image1(str),
      ),
    );
  }

  //圆角
  static Widget imageR(str, {w, h, r=5}) {
    double s=1;
    s.toDouble();
    return Container(
      width: w.toDouble(),
      height: h.toDouble(),
      child: Card(
        elevation: 0,
        shape: RoundedRectangleBorder(
            borderRadius: BorderRadiusDirectional.circular(r.toDouble()  )),
        clipBehavior: Clip.antiAlias,
        child: image1(str),
      ),
    );
  }

  //圆角
  static Widget imageR1(str, {w, h, r}) {
    return Container(
      width: w,
      height: h,
      child: ClipRRect(
        child: image1(str, w: w, h: h),
        borderRadius: BorderRadius.all(Radius.circular(r ?? 5)),
      ),
    );
  }

  static Widget image(str, {w, h,loadingbg,BoxFit? fit}) {
    return image1(str, w: w, h: h,loadingbg:loadingbg);
  }

  static Widget image1(str, {w, h,loadingbg,BoxFit? fit}) {
    String path = str ?? "";

    if (path.isEmpty) {
      return Image.asset(
        loadingbg?? bg_default_loading,
        fit: fit??BoxFit.cover,
      );
    }
    // if (path.contains("/Image/") && !path.contains("http")) {
    //   path = Api.baseUrlDevelop + path;
    // }
    if (path.contains("http")) {
      // return DisposableCachedImage.network(imageUrl: path.trim());
      return CachedNetworkImage(
        fit: fit??BoxFit.cover,
        fadeInDuration: const Duration(milliseconds: 300),
        fadeOutDuration: const Duration(milliseconds: 0),
        imageUrl: path.trim(),
        width: w,
        height: h,
        // placeholder: (context, url) =>
        //     Image.asset(loadingbg??bg_default_loading),
        errorWidget: (context, url, error) =>
            Image.asset(loadingbg??bg_default_loading),
      );
    // } else if (path.contains(".svg")) {
    //   return SvgPicture.asset(path);
    } else if (path.contains("assets")) {
      return Image.asset(
        path.trim(),
        fit: fit??BoxFit.cover,
      );
    }
    return Image.file(
      File(path.trim()),
      fit: fit??BoxFit.cover,
    );
  }

  ///endregion

  static Future<ui.Image> loadImage(String url) async {
    AssetBundle _bundle = rootBundle;
    ImageStream stream =   AssetImage(url, bundle: _bundle).resolve(ImageConfiguration.empty);
   var completer =   Completer<ui.Image>();
    late ImageStreamListener listener;
    listener =   ImageStreamListener(
            (ImageInfo frame, bool synchronousCall) {
          final ui.Image image = frame.image;
          completer.complete(image);
          stream.removeListener(listener);
        });
    stream.addListener(listener);
    return completer.future;
  }
}
